package com.example.sbeducation.common;

import lombok.Data;

/**
 * 统一响应结果类
 */
@Data
public class Result<T> {
  /**
   * 状态码
   */
  private Integer code;

  /**
   * 响应消息
   */
  private String message;

  /**
   * 响应数据
   */
  private T data;

  /**
   * 成功返回结果
   * 
   * @param data 返回数据
   * @param <T>  数据类型
   * @return 成功结果
   */
  public static <T> Result<T> success(T data) {
    Result<T> result = new Result<>();
    result.setCode(200);
    result.setMessage("操作成功");
    result.setData(data);
    return result;
  }

  /**
   * 成功返回结果
   * 
   * @param message 成功信息
   * @param <T>     数据类型
   * @return 成功结果
   */
  public static <T> Result<T> success(String message) {
    Result<T> result = new Result<>();
    result.setCode(200);
    result.setMessage(message);
    return result;
  }

  /**
   * 失败返回结果
   * 
   * @param code    错误码
   * @param message 错误信息
   * @param <T>     数据类型
   * @return 失败结果
   */
  public static <T> Result<T> error(Integer code, String message) {
    Result<T> result = new Result<>();
    result.setCode(code);
    result.setMessage(message);
    return result;
  }

  /**
   * 失败返回结果
   * 
   * @param message 错误信息
   * @param <T>     数据类型
   * @return 失败结果
   */
  public static <T> Result<T> error(String message) {
    return error(500, message);
  }
}